/*
题目名称：
使用signal函数自定义SIGINT信号的处理方式
题目内容：
1.考察对于信号处理方式的理解， 考察signal函数的使用

2.要求：自定义处理函数名称为“sigcb”, 在sigcb当中完成打印触发本次事件的信号值

3.提交要求：提交代码截图， 提交代码执行之后的截图
*/

#include  <signal.h>
#include <unistd.h>
#include <cstring>
#include <iostream>

using namespace std;

// void sigcb(int signo)
// {
//     cout << "get a signal: " << signo << endl;
// }

// int main()
// {
//     signal(SIGINT, sigcb);
//     while(true)
//     {
//         cout << "i am a process, pid: " << getpid() << endl;
//         sleep(1);
//     }
//     return 0;
// }

/*
题目名称：
使用sigaction函数自定义SIGINT信号的处理方式
题目内容：
1.考察对于信号处理方式的理解， 考察sigaction函数的使用

2.要求：自定义处理函数名称为“sigcb”, 在sigcb当中完成打印信号值

3.提交要求：提交代码截图， 提交代码执行之后的截图
*/

// void sigcb(int signo)
// {
//     cout << "get a signal: " << signo << endl;
// }

// int main()
// {
//     struct sigaction act, oact;
//     memset(&act, 0, sizeof(act));
//     memset(&oact, 0, sizeof(oact));
//     act.sa_handler = sigcb;
//     sigaction(SIGINT, &act, &oact);
//     while(true)
//     {
//         cout << "i am a process, pid: " << getpid() << endl;
//         sleep(1);
//     }
//     return 0;
// }

/*
题目名称：
使用sigprocmask函数阻塞2号信号和40号信号
题目内容：
1.考察对信号阻塞的理解， 考察对可靠信号和非可靠信号的理解，考察sigprocmask函数的使用

2.要求：阻塞2号信号和40号信号， 分别给进程发送5次2号信号和5次40号信号，观察结果

3.提交要求：提交代码截图， 提交代码执行之后的截图
*/

void sigcb(int signo)
{
    cout << "get a signal: " << signo << endl;
}

int main()
{
    sigset_t mask, omask;
    sigemptyset(&mask);
    sigemptyset(&omask);
    sigaddset(&mask, 2);
    sigaddset(&mask, 40);
    sigprocmask(SIG_SETMASK, &mask, &omask);
    while(true)
    {
        cout << "i am a process, pid: " << getpid() << endl;
        sleep(1);
    }
    return 0;
}